package main

import (
	"fmt"
	"log"
	"os"

	"gitee.com/liumou_site/gns/ping"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("用法: go run ping_stats_example.go <主机地址> [ping次数]")
		fmt.Println("示例: go run ping_stats_example.go 8.8.8.8 10")
		os.Exit(1)
	}

	host := os.Args[1]
	count := 4 // 默认ping次数

	if len(os.Args) >= 3 {
		if _, err := fmt.Sscanf(os.Args[2], "%d", &count); err != nil {
			log.Fatalf("无效的ping次数: %s", os.Args[2])
		}
	}

	// 创建Ping实例
	p := ping.NewPing(count, 5)

	fmt.Printf("正在ping %s，发送 %d 个包...\n", host, count)

	// 执行ping并获取统计信息
	result, err := p.ICMPWithStats(host, count, true)
	if err != nil {
		log.Printf("Ping失败: %v", err)
		// 即使失败也显示部分结果
	}

	// 显示详细的统计信息
	fmt.Println("\n=== Ping统计结果 ===")
	fmt.Printf("目标主机: %s\n", result.Host)
	fmt.Printf("发送包数: %d\n", result.Sent)
	fmt.Printf("接收包数: %d\n", result.Received)
	fmt.Printf("丢失包数: %d\n", result.Lost)
	fmt.Printf("丢包率: %.2f%%\n", result.LossRate)

	if result.Received > 0 {
		fmt.Printf("最小RTT: %v\n", result.MinRTT)
		fmt.Printf("最大RTT: %v\n", result.MaxRTT)
		fmt.Printf("平均RTT: %v\n", result.AvgRTT)

		// 显示所有RTT值
		fmt.Println("\n详细RTT信息:")
		for i, rtt := range result.RTTs {
			fmt.Printf("  包 %d: %v\n", i+1, rtt)
		}
	}

	// 根据丢包率给出网络质量评估
	fmt.Println("\n=== 网络质量评估 ===")
	switch {
	case result.LossRate == 0:
		fmt.Println("网络质量: 优秀 (无丢包)")
	case result.LossRate < 1:
		fmt.Println("网络质量: 良好 (丢包率 < 1%)")
	case result.LossRate < 5:
		fmt.Println("网络质量: 一般 (丢包率 1-5%)")
	case result.LossRate < 10:
		fmt.Println("网络质量: 较差 (丢包率 5-10%)")
	default:
		fmt.Println("网络质量: 很差 (丢包率 > 10%)")
	}

	if result.Received > 0 {
		switch {
		case result.AvgRTT < 10:
			fmt.Println("延迟质量: 优秀 (平均RTT < 10ms)")
		case result.AvgRTT < 50:
			fmt.Println("延迟质量: 良好 (平均RTT 10-50ms)")
		case result.AvgRTT < 100:
			fmt.Println("延迟质量: 一般 (平均RTT 50-100ms)")
		case result.AvgRTT < 200:
			fmt.Println("延迟质量: 较差 (平均RTT 100-200ms)")
		default:
			fmt.Println("延迟质量: 很差 (平均RTT > 200ms)")
		}
	}
}
